package top.lixunda.ecommerce.server.good.api.controller;

import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.web.bind.annotation.*;
import top.lixunda.commerce.common.core.entity.MessageObject;
import top.lixunda.common.validate.XumValid;
import top.lixunda.ecommerce.server.good.api.entity.dto.StoreCategoryInsertDTO;
import top.lixunda.ecommerce.server.good.api.entity.dto.StoreCategoryUpdateDTO;
import top.lixunda.ecommerce.server.good.api.entity.vo.SysStoreCategoryTreeVO;
import top.lixunda.ecommerce.server.good.api.entity.vo.SysStoreCategoryVO;

import java.util.List;

/**
 * 系统店铺类别
 *
 * @author Xumda
 * @version time:2020/1/11 10:54
 */
@SuppressWarnings("unused")
@Api("系统店铺类别管理")
@RequestMapping("/sys_store_category")
public interface ISysStoreCategoryController {

    /**
     * 添加一个店铺分类
     *
     * @param storeCategoryInsertDTO 新添加的店铺分类数据
     * @return 是否添加成功
     */
    @ApiOperation("添加一个店铺分类")
    @PostMapping("insertStoreCategory")
    MessageObject<Boolean> insertStoreCategory(@RequestBody @XumValid StoreCategoryInsertDTO storeCategoryInsertDTO);

    /**
     * 更新一个店铺分类
     *
     * @param storeCategoryUpdateDTO 需要更新的店铺分类数据
     * @return 是否更新成功
     */
    @ApiOperation("更新一个店铺分类")
    @PostMapping("updateStoreCategory")
    MessageObject<Boolean> updateStoreCategory(@RequestBody @XumValid StoreCategoryUpdateDTO storeCategoryUpdateDTO);

    /**
     * 根据id删除店铺分类，只删除该节点，其子节点全部放到父节点中去
     *
     * @param id 店铺分类id
     * @return 是否删除成功
     */
    @ApiOperation("根据id删除店铺分类，只删除该节点，其子节点全部放到父节点中去")
    @GetMapping("removeStoreCategoryById")
    MessageObject<Boolean> removeStoreCategoryById(@RequestParam("id") Integer id);

    /**
     * 根据id删除店铺分类，只删除该节点，其子节点全部放到父节点中去
     *
     * @param ids 店铺分类id
     * @return 是否删除成功
     */
    @ApiOperation("根据id删除店铺分类，只删除该节点，其子节点全部放到父节点中去")
    @PostMapping("removeStoreCategoryByIds")
    MessageObject<Boolean> removeStoreCategoryByIds(@RequestBody List<Integer> ids);

    /**
     * 根据id删除店铺分类，删除包括子节点的所有节点
     *
     * @param id 店铺分类id
     * @return 是否删除成功
     */
    @ApiOperation("根据id删除店铺分类，删除包括子节点的所有节点")
    @GetMapping("removeStoreCategoryAllById")
    MessageObject<Boolean> removeStoreCategoryAllById(@RequestParam("id") Integer id);

    /**
     * 根据id删除店铺分类，删除包括子节点的所有节点
     *
     * @param ids 店铺分类id
     * @return 是否删除成功
     */
    @ApiOperation("根据id删除店铺分类，删除包括子节点的所有节点")
    @PostMapping("removeStoreCategoryAllByIds")
    MessageObject<Boolean> removeStoreCategoryAllByIds(@RequestBody List<Integer> ids);

    /**
     * 根据id获取分类数据
     *
     * @param id 分类id
     * @return 单条分类数据
     */
    @ApiOperation("根据id获取分类数据")
    @GetMapping("queryById")
    MessageObject<SysStoreCategoryVO> queryById(@RequestParam("id") Integer id);

    /**
     * 查询整个分类树
     *
     * @return 分类树
     */
    @ApiOperation("查询整个分类树")
    @GetMapping("queryTree")
    MessageObject<SysStoreCategoryTreeVO> queryTree();

    /**
     * 根据父节点id获取子类节点列表
     *
     * @param id 父节点id
     * @return 子节点列表
     */
    @ApiOperation("根据父节点id获取子类节点列表")
    @GetMapping("queryChildrenByParentId")
    MessageObject<List<SysStoreCategoryVO>> queryChildrenByParentId(@RequestParam("id") Integer id);

    /**
     * 查询首层节点
     *
     * @return 首层节点
     */
    @ApiOperation("查询首层节点")
    @GetMapping("queryRoots")
    MessageObject<List<SysStoreCategoryVO>> queryRoots();

}
